package net.wanho.controller;

import lombok.RequiredArgsConstructor;
import net.wanho.R.R;
import net.wanho.dto.AssignRoleDTO;
import net.wanho.dto.UserInfoDTO;
import net.wanho.dto.UserUpdDTO;
import net.wanho.po.AuthInfo;
import net.wanho.po.Role;
import net.wanho.po.UserInfo;
import net.wanho.service.RoleService;
import net.wanho.service.UserInfoService;
import net.wanho.vo.PageInfo;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;


/**
 * 这个类是：
 *
 * @author: MENG HU WANG
 * @date: 2025/1/11 20:10
 * @version: 1.0
 */

@RestController
@RequestMapping("/user")
@RequiredArgsConstructor
public class UserController {

    private final UserInfoService userInfoService;
    private final RoleService roleService;

    // 用户菜单
    @GetMapping("auth-list")
    public R userInfoList() {
        List<AuthInfo> authInfo = userInfoService.findAuthList();
        return R.ok(authInfo);
    }

    // 用户列表
    @GetMapping("/user-list")
    public R userList(@RequestParam(defaultValue = "1") Integer pageNum,
                      @RequestParam(defaultValue = "5") Integer pageSize,
                      UserInfoDTO userInfoDTO) {
        PageInfo<UserInfo> pageInfo = userInfoService.listPage(pageNum, pageSize, userInfoDTO);
        return R.ok(pageInfo);
    }

    // 根据id查询用户信息
    @GetMapping("/{id}")
    public R selectUserById(@PathVariable String id) {
        UserInfo userInfo = userInfoService.getById(id);
        return R.ok(userInfo);
    }

    // 添加用户
    @PostMapping("/addUser")
    public R addUser(@RequestBody UserInfo userInfo) {
        userInfoService.addUser(userInfo);
        return R.ok("添加用户成功");
    }

    // 修改用户状态
    @PutMapping("/updateState")
    public R updateStater(@RequestBody UserInfo userInfo) {
        userInfoService.updateStateById(userInfo);
        return R.ok("修改用户状态成功");
    }

    // 修改用户信息
    @PutMapping("/updateUser")
    public R updateUser(@RequestBody UserUpdDTO userUpdDTO) {
        userInfoService.updateByUserId(userUpdDTO);
        return R.ok("修改用户信息成功");
    }

    // 删除用户
    @DeleteMapping("/deleteUser/{id}")
    public R deleteUser(@PathVariable Integer id) {
        userInfoService.removeByUserId(id);
        return R.ok("删除用户成功");
    }

    // 批量删除
    @DeleteMapping("/deleteUserList")
    public R deleteUserList(@RequestBody List<Integer> ids) {
        userInfoService.removeByUserIds(ids);
        return R.ok("批量删除用户成功");
    }

    // 重置密码
    @PutMapping("/updatePwd/{id}")
    public R updatePwd(@PathVariable Integer id) {
        userInfoService.updatePwd(id);
        return R.ok("重置密码成功");
    }

    // 根据用户id查询角色
    @GetMapping("/user-role-list/{id}")
    public R userRoleList(@PathVariable Integer id) {
        List<Role> list = roleService.getUserRoleList(id);
        return R.ok(list);
    }

    // 分配角色
    @PutMapping("/assignRole")
    public R assignRole(@RequestBody AssignRoleDTO assignRole) {
        // TODO 无法分配角色 待解决 400报错 序列化出现错误
        userInfoService.saveAssignRole(assignRole);
        return R.ok("分配角色成功");
    }

    // 根据用户ID查询权限
    @GetMapping("/user-auth")
    public R userAuth(@RequestParam Integer userId) {
        List<Integer> list = userInfoService.getUserAuthList(userId);
        return R.ok(list);
    }

    // 导出数据
    @GetMapping("/exportTable")
    public R exportTable() {
        return R.ok("导出数据成功");
    }

    // 修改密码
    // TODO 还没写 需要修改前端

    // 修改个人信息
    // TODO 还没写 需要修改前端

    // 修改头像
    // TODO 还没写 需要修改前端
}
